#include "token.hpp"
#include <string>
#include <vector>
#include <cctype>
namespace Lexer
{
    class Lexer
    {
        public:
            Lexer(const std::string&);
            ~Lexer();

            void Run();
            std::vector<Token::Token*> GetTokens();
            
        private:
            Token::Token* nextToken(); 
            Token::Token* makeTwoCharToken(Token::TokenType);
            void readChar();
            std::string readString();
            std::string readIdentifier();
            std::string readNumber();
            void skipWhitespace();
            char peekChar();
        private:
            std::vector<Token::Token*> m_tokens;            
            std::string m_input;
            int m_position;
            int m_readPosition;
            char m_ch;        
    };
}